home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / Tools / Development / ncurses-5.3 / ncurses / tinfo / name_match.c < prev    next >
Encoding:
C/C++ Source or Header  |  2002-10-27  |  3.6 KB  |  102 lines

  1. /****************************************************************************
  2.  * Copyright (c) 1999,2000,2001 Free Software Foundation, Inc.              *
  3.  *                                                                          *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a  *
  5.  * copy of this software and associated documentation files (the            *
  6.  * "Software"), to deal in the Software without restriction, including      *
  7.  * without limitation the rights to use, copy, modify, merge, publish,      *
  8.  * distribute, distribute with modifications, sublicense, and/or sell       *
  9.  * copies of the Software, and to permit persons to whom the Software is    *
  10.  * furnished to do so, subject to the following conditions:                 *
  11.  *                                                                          *
  12.  * The above copyright notice and this permission notice shall be included  *
  13.  * in all copies or substantial portions of the Software.                   *
  14.  *                                                                          *
  15.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
  16.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
  17.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
  18.  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
  19.  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
  20.  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
  21.  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
  22.  *                                                                          *
  23.  * Except as contained in this notice, the name(s) of the above copyright   *
  24.  * holders shall not be used in advertising or otherwise to promote the     *
  25.  * sale, use or other dealings in this Software without prior written       *
  26.  * authorization.                                                           *
  27.  ****************************************************************************/
  28.  
  29. /****************************************************************************
  30.  *  Author: Thomas E. Dickey <dickey@clark.net> 1999                        *
  31.  ****************************************************************************/
  32.  
  33. #include <curses.priv.h>
  34. #include <term.h>
  35. #include <tic.h>
  36.  
  37. MODULE_ID("$Id: name_match.c,v 1.12 2002/08/31 21:48:41 Philippe.Blain Exp $")
  38.  
  39. /*
  40.  *    _nc_first_name(char *names)
  41.  *
  42.  *    Extract the primary name from a compiled entry.
  43.  */
  44.  
  45. NCURSES_EXPORT(char *)
  46. _nc_first_name(const char *const sp)
  47. /* get the first name from the given name list */
  48. {
  49.     static char *buf;
  50.     register unsigned n;
  51.  
  52.     if (buf == 0)
  53.     buf = typeMalloc(char, MAX_NAME_SIZE + 1);
  54.     for (n = 0; n < MAX_NAME_SIZE; n++) {
  55.     if ((buf[n] = sp[n]) == '\0'
  56.         || (buf[n] == '|'))
  57.         break;
  58.     }
  59.     buf[n] = '\0';
  60.     return (buf);
  61. }
  62.  
  63. /*
  64.  *    int _nc_name_match(namelist, name, delim)
  65.  *
  66.  *    Is the given name matched in namelist?
  67.  */
  68.  
  69. NCURSES_EXPORT(int)
  70. _nc_name_match
  71. (const char *const namelst, const char *const name, const char *const delim)
  72. {
  73.     const char *s, *d, *t;
  74.     int code, found;
  75.  
  76.     if ((s = namelst) != 0) {
  77.     while (*s != '\0') {
  78.         for (d = name; *d != '\0'; d++) {
  79.         if (*s != *d)
  80.             break;
  81.         s++;
  82.         }
  83.         found = FALSE;
  84.         for (code = TRUE; *s != '\0'; code = FALSE, s++) {
  85.         for (t = delim; *t != '\0'; t++) {
  86.             if (*s == *t) {
  87.             found = TRUE;
  88.             break;
  89.             }
  90.         }
  91.         if (found)
  92.             break;
  93.         }
  94.         if (code && *d == '\0')
  95.         return code;
  96.         if (*s++ == 0)
  97.         break;
  98.     }
  99.     }
  100.     return FALSE;
  101. }
  102.